package com.dangf.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dangf.entity.Article;
import com.dangf.entity.ArticleType;
import com.dangf.entity.User;
import com.dangf.service.ArticleService;
import com.dangf.utils.IsNullUtils;
import com.dangf.utils.Pinyin;

/**
 * 小偷控制器
 * 
 * @author HaiSheng
 * @date 2015年7月13日
 */
@Controller
@RequestMapping("/thief")
public class ThiefController extends BaseController {
	private String fileSavePath;

	@Resource
	private ArticleService articleService;
	
	@Autowired
	private HttpServletRequest request;

	@RequestMapping("dz")
	@ResponseBody
	// 列表
	public Map<String, Object> index() {
		fileSavePath = request.getSession().getServletContext().getRealPath("");	//获取根目录地址
		
		//开始偷取
		startThief("http://day.2345.com/index.php?t=lxh");
		return setResult(HTTP_CODE_SUCCESS, "段子采集完成...", ""+fileSavePath);
	}

	/** 工作 */
	public void startThief(String url) {
		try {
		     
			Document doc = Jsoup.connect(url).get();	//获取内容
			//获取下一页
			String next = "http://day.2345.com/"+ doc.select("[onclick=clickCount('mryljhy_xyy')]").attr("href");
			//获取所有文件div
			Elements articleElements = doc.getElementsByClass("article");
			//获取，设置文章内容
			Article article = new Article();
			article.setType(new ArticleType(1));
			article.setUser(new User(10000));
			for (Element element : articleElements) {
				article.setTitle(element.select("h2").text());		//标题
				article.setInsertTime(new Date().getTime());		//日期
				article.setSource(element.getElementsByClass("author").text().replace("来源：", ""));		//来源
				article.setContent(element.getElementsByClass("item_cnt").html());		//内容。
				//如果标题和内容不为空就采集。
				if (IsNullUtils.stringIsNull(article.getContent()) && IsNullUtils.stringIsNull(article.getTitle())) {
					if (article.getContent().indexOf("img") != -1) { // 如果有图片
						String imageUrl = element.select(".item_cnt").select("img").attr("data-original");	//下载地址
						String imageName = new Date().getTime()+getExtension(imageUrl);	//图片名词
						String imageSavePath ="/update_file/image/"+imageName ;			//图片保存地址
						article.setContent(article.getContent().replace(element.getElementsByClass("item_cnt").select("img").outerHtml(), "<img src=\""+imageSavePath+"\">"));
						article.setType(new ArticleType(2));	//设置图片类型
						boolean isSave= articleService.addArticleAndNameToId(article);
						if(isSave)download("http://day.2345.com/"+imageUrl,imageName, fileSavePath+"/update_file/image/");
					}else{	//下载文章
						articleService.addArticleAndNameToId(article);
					}
				}
			}

			//下一页，继续抓取
			if (next != null && !"".equals(next) && next.length() != 0)
				startThief(next);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 根据路径 下载图片 然后 保存到对应的目录下
	 * 
	 * @param urlString
	 * @param filename
	 * @param savePath
	 * @return
	 * @throws Exception
	 */
	public void download(String urlString, String filename, String savePath)throws Exception {
		// 构造URL
		URL url = new URL(urlString);
		// 打开连接
		URLConnection con = url.openConnection();
		// 设置请求的路径
		con.setConnectTimeout(5 * 1000);
		// 输入流
		InputStream is = con.getInputStream();

		// 1K的数据缓冲
		byte[] bs = new byte[1024];
		// 读取到的数据长度
		int len;
		// 输出的文件流
		File sf = new File(savePath);
		if (!sf.exists()) {
			sf.mkdirs();
		}
		OutputStream os = new FileOutputStream(sf.getPath() + "\\" + filename);
		// 开始读取
		while ((len = is.read(bs)) != -1) {
			os.write(bs, 0, len);
		}
		// 完毕，关闭所有链接
		os.close();

		is.close();
	}

	/**
	 * 根据文件名 获取文件的后缀名
	 * 
	 * @param fileUrl
	 * @return
	 */
	public String getExtension(String fileUrl) {
		return fileUrl.substring(fileUrl.lastIndexOf("."), fileUrl.length());
	}

}
